package ongd.negocio.gestion;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Clase que corresponde a la entidad Configuración de la base de datos.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
@Entity
@Table(name = "configuracion")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Configuracion.findAll", query = "SELECT c FROM Configuracion c"),
    @NamedQuery(name = "Configuracion.findByIdconfiguracion", query = "SELECT c FROM Configuracion c WHERE c.idconfiguracion = :idconfiguracion"),
    @NamedQuery(name = "Configuracion.findByMailHostSMTP", query = "SELECT c FROM Configuracion c WHERE c.mailHostSMTP = :mailHostSMTP"),
    @NamedQuery(name = "Configuracion.findByMailPuertoSMTP", query = "SELECT c FROM Configuracion c WHERE c.mailPuertoSMTP = :mailPuertoSMTP"),
    @NamedQuery(name = "Configuracion.findByMailDireccion", query = "SELECT c FROM Configuracion c WHERE c.mailDireccion = :mailDireccion"),
    @NamedQuery(name = "Configuracion.findByMailUsuario", query = "SELECT c FROM Configuracion c WHERE c.mailUsuario = :mailUsuario"),
    @NamedQuery(name = "Configuracion.findByMailPassword", query = "SELECT c FROM Configuracion c WHERE c.mailPassword = :mailPassword"),
    @NamedQuery(name = "Configuracion.findByFechaCuotas", query = "SELECT c FROM Configuracion c WHERE c.fechaCuotas = :fechaCuotas")})
public class Configuracion extends Entidad implements Serializable {
    
    /**
     * Atributo serialVersionUID.
     */
    private static final long serialVersionUID = 1L;
    /**
     * Atributo que corresponde con la clave primaria.
     */
    @Id
    @Basic(optional = false)
    @Column(name = "idconfiguracion")
    private Integer idconfiguracion;
    /**
     * Atributo que corresponde con el host de SMTP.
     */
    @Basic(optional = false)
    @Column(name = "mailHostSMTP")
    private String mailHostSMTP;
    /**
     * Atributo que corresponde con el puerto SMTP.
     */
    @Basic(optional = false)
    @Column(name = "mailPuertoSMTP")
    private String mailPuertoSMTP;
    /**
     * Atributo que correspondo con la direccion que envia los correos.
     */
    @Basic(optional = false)
    @Column(name = "mailDireccion")
    private String mailDireccion;
    /**
     * Atributo que corresponde con el usuario de la aplicación.
     */
    @Basic(optional = false)
    @Column(name = "mailUsuario")
    private String mailUsuario;
    /**
     * Atributo que corresponde con la contraseña del usuario.
     */
    @Basic(optional = false)
    @Column(name = "mailPassword")
    private String mailPassword;
    /**
     * Atributo que corresponde a la fecha en la que se generaron las cuotas automáticas.
     */
    @Column(name = "FechaCuotas")
    @Temporal(TemporalType.DATE)
    private Date fechaCuotas;

    /**
     * Constructor de la clase.
     */
    public Configuracion() {
    }

    /**
     * Constructor de la clase.
     * @param idconfiguracion identificador de la configuración. 
     */
    public Configuracion(Integer idconfiguracion) {
        this.idconfiguracion = idconfiguracion;
    }

    /**
     * Constructor de la clase.
     * @param idconfiguracion identificador de la configuración.
     * @param mailHostSMTP host SMTP.
     * @param mailPuertoSMTP puerto SMTP.
     * @param mailDireccion direccion de correo emisora.
     * @param mailUsuario usuario de la aplicacion.
     * @param mailPassword contraseña del usuario. 
     */
    public Configuracion(Integer idconfiguracion, String mailHostSMTP, String mailPuertoSMTP, String mailDireccion, String mailUsuario, String mailPassword) {
        this.idconfiguracion = idconfiguracion;
        this.mailHostSMTP = mailHostSMTP;
        this.mailPuertoSMTP = mailPuertoSMTP;
        this.mailDireccion = mailDireccion;
        this.mailUsuario = mailUsuario;
        this.mailPassword = mailPassword;
    }

    /**
     * Método que devuelve el identificador de la configuración.
     * @return identificador de la configuración.
     * @see #setIdconfiguracion
     */
    public Integer getIdconfiguracion() {
        return idconfiguracion;
    }

    /**
     * Método que asigna un nuevo valor al identificador de la configuración.
     * @param idconfiguracion nuevo identificador
     * @see #getIdconfiguracion
     */
    public void setIdconfiguracion(Integer idconfiguracion) {
        this.idconfiguracion = idconfiguracion;
    }

    /**
     * Método que devuelve el host de SMTP para el email.
     * @return host de SMTP
     * @see #setMailHostSMTP
     */
    public String getMailHostSMTP() {
        return mailHostSMTP;
    }

    /**
     * Método que asigna un nuevo host de SMTP.
     * @param mailHostSMTP nuevo valor del host. 
     * @see #getMailHostSMTP
     */
    public void setMailHostSMTP(String mailHostSMTP) {
        this.mailHostSMTP = mailHostSMTP;
    }

    /**
     * Método que devuelve el puerto SMTP para el correo.
     * @return puerto SMTP.
     * @see #setMailPuertoSMTP
     */
    public String getMailPuertoSMTP() {
        return mailPuertoSMTP;
    }

    /**
     * Método que asigna un nuevo valor al puerto SMTP.
     * @param mailPuertoSMTP nuevo puerto. 
     * @see #getMailPuertoSMTP
     */
    public void setMailPuertoSMTP(String mailPuertoSMTP) {
        this.mailPuertoSMTP = mailPuertoSMTP;
    }

    /**
     * Método que devuelve la dirección emisora de los correos.
     * @return dirección de correo.
     * @see #setMailDireccion
     */
    public String getMailDireccion() {
        return mailDireccion;
    }

    /**
     * Método que asigna una nueva dirección de correo.
     * @param mailDireccion nueva dirección. 
     * @see #getMailDireccion
     */
    public void setMailDireccion(String mailDireccion) {
        this.mailDireccion = mailDireccion;
    }

    /**
     * Método que devuelve el usuario de la palicacion.
     * @return usuario.
     * @see #setMailUsuario
     */
    public String getMailUsuario() {
        return mailUsuario;
    }
    
    /**
     * Método que asigna un nuevo usuario de la aplicación. 
     * @param mailUsuario nuevo usuario. 
     * @see #getMailUsuario
     */
    public void setMailUsuario(String mailUsuario) {
        this.mailUsuario = mailUsuario;
    }

    /**
     * Método que devuelve la contraseña.
     * @return contraseña.
     * @see #setMailPassword
     */
    public String getMailPassword() {
        return mailPassword;
    }

    /**
     * Método que asigna una nueva contraseña.
     * @param mailPassword Nuevo valor de la variable
     * @see #getMailPassword
     */
    public void setMailPassword(String mailPassword) {
        this.mailPassword = mailPassword;
    }

    /**
     * Método que devuelve la fecha en la que se generaron las cuotas automáticas por última vez.
     * @return fecha de la generación de la cuotas.
     * @see #setFechaCuotas
     */
    public Date getFechaCuotas() {
        return fechaCuotas;
    }
    
    /**
     * Método que asigna una fecha de la última generación de las cuotas.
     * @param fechaCuotas nueva fecha. 
     * @see #getFechaCuotas
     */
    public void setFechaCuotas(Date fechaCuotas) {
        this.fechaCuotas = fechaCuotas;
    }

    /**
     * Método que devuelve un número con una propiedad fundamental, si dos 
     * objetos son iguales el valor retornado por sus respectivos hashCode 
     * debe ser igual.
     * @return hash
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idconfiguracion != null ? idconfiguracion.hashCode() : 0);
        return hash;
    }

    /**
     * Método que compara si dos configuraciones son iguales.
     * @param object Objeto a comparar
     * @return true o false
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Configuracion)) {
            return false;
        }
        Configuracion other = (Configuracion) object;
        if ((this.idconfiguracion == null && other.idconfiguracion != null) || (this.idconfiguracion != null && !this.idconfiguracion.equals(other.idconfiguracion))) {
            return false;
        }
        return true;
    }

    /**
     * Método que devuelve una cadena con la configuración.
     * @return string
     */
    @Override
    public String toString() {
        return "ongd.negocio.gestion.Configuracion[ idconfiguracion=" + idconfiguracion + " ]";
    }
    
}
